package cm.unit2.theme4;

public class NumberOf1 {

	// 向左移动；循环int的位数
    public int NumberOf1(int n) {
    	int flag = 1;
        int count = 0;
        while (flag!=0) {
			if ((flag&n)==flag) {
				count++;
			}
			flag = flag << 1;
		}
        return count;
    }
    
    // 循环32次
    public int NumberOf1_2(int n) {
    	int flag = 1;
        int count = 0;
        int index = 0;
        // 因为知道int是32为,所以能够处理负数
        while (index < 32) {
			if ( ((n>>index)&flag)==1 ) {
				count++;
			}
			index++;
		}
        return count;
    }
    
    
	// 抄来的骚操作
    // 有多少个1就循环多少次
    public int NumberOf1_3(int n) {
        int count = 0;
        while(n!= 0){
            count++;
            n = n & (n - 1);
         }
        return count;
    }
    
    public static void main(String[] args) {
    	NumberOf1 numberOf1 = new NumberOf1();
    	System.out.println(numberOf1.NumberOf1(10));;
	}
}
